package br.com.foxinline.manager.pesquisar;

import br.com.foxinline.enums.TipoPessoa;
import br.com.foxinline.modelo.ContaBancaria;
import br.com.foxinline.modelo.Pessoa;
import br.com.foxinline.servico.PessoaServico;
import br.com.foxinline.utilitario.Caracteres;
import br.com.foxinline.utilitario.Mensagem;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

/**
 *
 * @author cadomeireles
 */
@ManagedBean
@ViewScoped
public class ManagerPesquisarPessoa implements Serializable {

    @EJB
    PessoaServico pessoaServico;
    private Pessoa pessoaPesquisar;
    private Pessoa pessoaDeletar;
    private Pessoa pessoaVisualizar;
    private List<Pessoa> pessoas;
    private List<ContaBancaria> contasBancarias;
    private String visualizarId;

    @PostConstruct
    public void init() {
        instanciar(TipoPessoa.FISICA);
        delegar();
    }

    private void instanciar(TipoPessoa tipoPessoa) {
        this.pessoaPesquisar = new Pessoa();
        this.pessoaPesquisar.setTipoPessoa(tipoPessoa);
        this.pessoaDeletar = new Pessoa();
        this.pessoaVisualizar = new Pessoa();
        this.pessoas = new ArrayList<Pessoa>();
    }

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.visualizarId = parametros.get("pessoaId");

        if (visualizarId != null) {
            this.pessoaVisualizar = pessoaServico.pesquisar(Long.parseLong(visualizarId));
            this.contasBancarias = pessoaServico.obterContasBancarias(this.pessoaVisualizar);
        }
    }

    public void pesquisarFornecedor() {
        this.pessoas = pessoaServico.pesquisarFornecedor(this.pessoaPesquisar);
    }

    public void pesquisarCliente() {
        this.pessoas = pessoaServico.pesquisarCliente(this.pessoaPesquisar);
    }

    public void limpar(TipoPessoa tipoPessoa) {
        instanciar(tipoPessoa);
    }

    public void deletar() {
        pessoaServico.deletar(this.pessoaDeletar);

        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        FacesContext fc = FacesContext.getCurrentInstance();
        FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente excluído com sucesso!", ""));
        fc.getExternalContext().getFlash().setKeepMessages(true);

        try {
            context.redirect("pesquisarCliente.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(ManagerPesquisarPessoa.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String adicionarMascaraCNPJ(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cnpjMask);
    }

    public String adicionarMascaraCPF(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cpfMask);
    }

    public String adicionarMascaraCEP(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cepMask);
    }

    public Pessoa getPessoaDeletar() {
        return pessoaDeletar;
    }

    public void setPessoaDeletar(Pessoa pessoaDeletar) {
        this.pessoaDeletar = pessoaDeletar;
    }

    public Pessoa getPessoaPesquisar() {
        return pessoaPesquisar;
    }

    public void setPessoaPesquisar(Pessoa pessoaPesquisar) {
        this.pessoaPesquisar = pessoaPesquisar;
    }

    public Pessoa getPessoaVisualizar() {
        return pessoaVisualizar;
    }

    public void setPessoaVisualizar(Pessoa pessoaVisualizar) {
        this.pessoaVisualizar = pessoaVisualizar;
    }

    public List<Pessoa> getPessoas() {
        return pessoas;
    }

    public void setPessoas(List<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }

    public List<ContaBancaria> getContasBancarias() {
        return contasBancarias;
    }

    public void setContasBancarias(List<ContaBancaria> contasBancarias) {
        this.contasBancarias = contasBancarias;
    }
}
